package Modle;

import android.text.TextUtils;
import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/1/14.
 */
public class BaseResult {

    public String data;
    public BaseStude status;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public BaseStude getStatus() {
        return status;
    }

    public void setStatus(BaseStude status) {
        this.status = status;
    }

    /**
     * @Description 解析父对象为Object对象
     * @param obj
     * @param cla
     *            要解析的对象
     * @return T
     */
    public <T> T toObject(Class<T> cla) {
        if(TextUtils.isEmpty(data)){
            try {
                return cla.newInstance();
            } catch (InstantiationException e) {
                Log.d("fastjson解析错误", e.getMessage());
            } catch (IllegalAccessException e) {
                Log.d("fastjson解析错误", e.getMessage());
            }
        }
        try {
            return JSON.parseObject(data, cla);
        } catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return null;
        }
    }

    /**
     * 根据解析父对象为Object对象
     * @Date 2015年2月1日
     * @param cla
     * @param key
     * @return
     */
    public <T> T toObject(Class<T> cla,String key) {
        if(TextUtils.isEmpty(data)){
            try {
                return cla.newInstance();
            } catch (InstantiationException e) {
                Log.d("fastjson解析错误", e.getMessage());
            } catch (IllegalAccessException e) {
                Log.d("fastjson解析错误", e.getMessage());
            }
        }
        try{
            JSONObject obj0 = JSON.parseObject(data);
            if(obj0.containsKey(key)){
                JSONObject obj1 = obj0.getJSONObject(key);
                return JSON.toJavaObject(obj1, cla);
            }
            else{
                return cla.newInstance();
            }
        } catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return null;
        }

    }


    /**
     * @Description 解析父对象为List集合
     * @param obj
     * @param clazz
     *            要解析的对象(List 存放的对象)
     * @return ArrayList<T>
     */
    public <T> ArrayList<T> toArray(Class<T> clazz) {
        if (TextUtils.isEmpty(data)){
            return new ArrayList<T>();
        }
        try {
            return (ArrayList<T>) JSON.parseArray(data, clazz);
        } catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return new ArrayList<T>();
        }
    }

    /**
     *  解析父对象JsonObject
     * @Date 2015年1月21日
     * @param clazz
     * @param key : 为JsonArray key
     * @return
     */
    public <T> ArrayList<T> toArray(Class<T> clazz,String key) {
        if (TextUtils.isEmpty(data)){
            return new ArrayList<T>();
        }
        try {
            JSONObject obj = JSON.parseObject(data);
            if(obj.containsKey(key)){
                JSONArray arr = obj.getJSONArray(key);
                return (ArrayList<T>) JSON.parseArray(arr.toJSONString(), clazz);
            }
            return new ArrayList<T>();
        } catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return new ArrayList<T>();
        }
    }

    /**
     * 将data字符串转换成{@link com.alibaba.fastjson.JSONObject}对象
     * @return
     */
    public JSONObject getAsJsonObject(){
        if (TextUtils.isEmpty(data)){
            return new JSONObject();
        }
        try {
            return JSON.parseObject(data);
        } catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return new JSONObject();
        }
    }

    /**
     *  解析父对象为List集合
     * @param data
     * @param clazz
     * @param key
     * @param <T>
     * @return
     */
    public static <T> List<T> toArray(String data, Class<T> clazz, String key){
        if (data == null || data.equals("")) return null;
        try {
            JSONObject obj = JSON.parseObject(data);
            if(obj.containsKey(key)){
                JSONArray arr = obj.getJSONArray(key);
                return (ArrayList<T>) JSON.parseArray(arr.toJSONString(), clazz);
            }
            return new ArrayList<T>();
        }catch (Exception e) {
            Log.d("fastjson解析错误", e.getMessage());
            return new ArrayList<T>();
        }
    }
}
